<?php

/*******************************************************************
 * Để thực hiện ứng dụng login – logout bằng Zend Author chúng ta sẽ bao gồm những bước sau:
 * 1. Tạo kết nối Database trong Bootstrap của ứng dụng
 * 2. Tạo hàm preDispatch() chuyển hướng user nếu chưa login
 * 3. Tạo loginAction, sử dụng Zend Auth để kiểm tra tài khoản
 * 4. Tạo  indexAcion
 * 5. Tạo logoutAction
 *  
 *******************************************************************/


class IndexController extends Zend_Controller_Action 
{
    //setup Index
    public function init()
    {
        /* Initialize action controller here */
        //$this->_helper->viewRenderer->setNoRender();      //ko dung View
        $this->_helper->layout->disableLayout();            //ko load Layout vào ứng dụng
    }
    
    //---Tạo indexAction. 
    //---Action này đơn giản chỉ có chức năng truy cập vào session của Zend Auth 
    //---và lấy ra tên của user đã login sau đó truyền ra ngoài VIEW của action này. (Xem lý thuyết mục 11)
    public function indexAction()
    {   
        $auth = Zend_Auth::getInstance();
        $infoUser = $auth->getIdentity();
        $this->view->fullName = $infoUser->full_name;
    }  
       
    /*** 2. Tạo hàm preDispatch() chuyển hướng user nếu chưa login     
     *      Khi user chưa đăng nhập vào tài khoản thì chúng ta sẽ cho user chuyển hướng đến trang login
     */
    public function preDispatch() 
    {    
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()) {
            if ($this->_request->getActionName() != "login") {
                $this->_redirect("/index/login");
            }
        }
    }
    
    /**
     * 3. Tạo loginAction để kiểm tra dữ liệu từ Form đăng nhập 
     * Tạo một form login trong phần VIEW của loginAction 
     * sau đó gửi dữ liệu vào loginAction kiểm tra xem có tồn tại hay không. 
     * (Xem lý thuyết từ mục 2 đến mục 9) 
     *  
     */
    
    public function loginAction() 
    {
        if ($this->_request->isPost()) 
        {
            //1.Goi ket noi voi Zend Db
            $db = Zend_Registry::get("connectDB");            

            //$db = Zend_Db::factory($dbOption["adapter"],$dbOption["params"]);
            
            //2. Khoi tao Zend Autho
            $auth = Zend_Auth::getInstance ();          
            
            //3. Khai bao bang va 2 cot se su dung so sanh trong qua trinh login
            $authAdapter = new Zend_Auth_Adapter_DbTable($db);
            $authAdapter->setTableName("users")
                    ->setIdentityColumn("username")
                    ->setCredentialColumn("password");
            
            //4. Lay gia tri duoc gui qua tu FORM
            $uname = $this->_request->getParam("username");
            $paswd = $this->_request->getParam("password");            
                        
            //5. Dua vao so sanh voi du lieu khai bao o muc 3
            $authAdapter->setIdentity($uname);
            $authAdapter->setCredential(md5($paswd));                       
            
            //6. Kiem tra trang thai cua user neu status = 1 moi duoc login
            $select = $authAdapter->getDbSelect();
            $select->where("status = 1");
            
            //7. Lay ket qua truy van
            $result = $auth->authenticate($authAdapter);            
            
            //---Biến $flag trong phần này có tác dụng nếu login thành công biến $flag sẽ có giá trị true. 
            //---Khi có giá trị true thì tự động chuyển đến indexAction(). 
            //---Nếu giá tri fasle sẽ vẫn ở loginAction()
            $flag = false;  
            
            if ($result->isValid()) 
            {                
                //8. Lay nhung du lieu can thiet trong bang users neu login thanh cong
                $data = $authAdapter->getResultRowObject(null, array("password"));

                //9. Luu  nhung du lieu cua member vao session
                $auth->getStorage()->write($data);
                $flag = true;
            }
            if ($flag == true) 
            {
                $this->_redirect("/index/index");
            }
        }
    }
    
    //5. Tạo logoutAction
    //Để thoát khỏi hệ thống chúng ta chỉ cần xóa điều kiện chứng thực của Zend Auth. (Xem lý thuyết mục 12)
            
    public function logoutAction()
    {
        $auth = Zend_Auth::getInstance();
        $auth->clearIdentity();        
    }
}
